//package com.tyhy.jwt.filter;
//
//import com.alibaba.fastjson.JSON;
//import com.tyhy.jwt.service.IJwtService;
//import com.tyhy.jwt.utils.JwtUtil;
//import com.tyhy.utils.R;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.HandlerInterceptor;
//import org.springframework.web.servlet.ModelAndView;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.io.PrintWriter;
//import java.util.Arrays;
//
//
///**
// * JWT认证过滤器
// *
// * @author zhuxuejiang
// * @date 2020-02-29 09:40:17
// */
//@Slf4j
//@Component
//public class JwtAuthFilter  implements HandlerInterceptor {
//
//    @Value("${com.tyhy.jwt.key}")
//    private String key;
//
//    @Value("#{'${com.tyhy.jwt.skip-auth-urls}'.split(',')}")
//    private String[] skipAuthUrls;
//
//    @Value("${com.tyhy.jwt.jwtEnable}")
//    private boolean jwtEnable;
//
//    @Value("${com.tyhy.jwt.errMsg}")
//    private String errMsg;
//
//
//    @Autowired
//    private IJwtService jwtService;
//
//    //目标方法执行之前
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        if(!jwtEnable) {
//            log.info("未开启jwt,通过");
//            return true;
//        }
//
//        //跳过不需要验证的路径
//        if (null != skipAuthUrls && Arrays.asList(skipAuthUrls).contains(request.getRequestURI())) {
//            log.info("{}不进行jwt认证,通过",request.getRequestURI());
//            return true;
//        }
//
//        //获取token
//        String jwt = request.getHeader("Authorization");
//        //获取 userId
//        String userIdHead = request.getHeader("cbcUserId");
//        if (StringUtils.isBlank(jwt) || StringUtils.isBlank(userIdHead)) {
//            //没有token
//            log.warn("head信息中,无jwt信息或userId,ip:{}",JwtUtil.getIPAddress(request));
//            return authErro(response);
//        } else {
//            //有token
//            try {
//                if (jwtService.checkToken(key, jwt, request, userIdHead)){
//                    return true;
//                }else {
//                    return authErro(response);
//                }
//            } catch (Exception e) {
//                log.error("jwt:{} 解密异常,e:{},ip:{}",jwt,e.getMessage(),JwtUtil.getIPAddress(request));
//                return authErro(response);
//            }
//        }
//    }
//
//    @Override
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
//
//    }
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
//
//    }
//
//    /**
//     * 跳转至错误页面
//     * @param response
//     * @return {@link boolean}
//     * @since 2020/7/25
//     * 版本历史:
//     * Date         Author         Description
//     *---------------------------------------------------------*
//     * 2020/7/25   chenxu          初始创建
//     */
//    private boolean authErro( HttpServletResponse response) throws IOException {
//        PrintWriter writer = response.getWriter();
//        writer.print(JSON.toJSONString(R.error(errMsg)));
//        return false;
//    }
//}